package com.ruoyi.system.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.common.core.domain.dto.UserSalaryDTO;
import com.ruoyi.common.core.domain.entity.SysSalary;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 薪资信息表 数据层
 * 
 * @author Kelsey
 */
public interface SysSalaryMapper {

    /**
     * 查询薪资数据集合（分页）
     *
     * @param page 分页参数
     * @param salary 薪资信息
     * @return 薪资数据集合
     */
    IPage<SysSalary> selectSalaryList(IPage<SysSalary> page, @Param("salary") SysSalary salary);

    /**
     * 查询薪资数据集合
     *
     * @param salary 薪资信息
     * @return 薪资数据集合
     */
    public List<SysSalary> selectSalaryList(@Param("salary") SysSalary salary);

    /**
     * 通过薪资ID查询薪资信息
     *
     * @param salaryId 薪资ID
     * @return 薪资对象信息
     */
    public SysSalary selectSalaryById(Long salaryId);

    /**
     * 删除薪资信息
     *
     * @param salaryId 薪资ID
     * @return 结果
     */
    public int deleteSalaryById(Long salaryId);

    /**
     * 批量删除薪资信息
     *
     * @param salaryIds 需要删除的薪资ID
     * @return 结果
     */
    public int deleteSalaryByIds(Long[] salaryIds);

    /**
     * 修改薪资信息
     *
     * @param salary 薪资信息
     * @return 结果
     */
    public int updateSalary(SysSalary salary);

    /**
     * 新增薪资信息
     *
     * @param salary 薪资信息
     * @return 结果
     */
    public int insertSalary(SysSalary salary);

    /**
     * 校验该用户在该月份是否存在薪资信息
     *
     * @param userId 用户ID
     * @param salaryMonth 薪资月份
     * @return 薪资信息
     */
    public SysSalary checkSalaryExist(@Param("userId") Long userId, @Param("salaryMonth") String salaryMonth);

    /**
     * 查询用户薪资信息（显式JOIN查询）
     * @return 用户薪资列表
     */
    List<UserSalaryDTO> selectUserSalaryWithExplicitJoin();

    /**
     * 查询用户薪资信息（隐式JOIN查询）
     * @return 用户薪资列表
     */
    List<UserSalaryDTO> selectUserSalaryWithImplicitJoin();
} 